package com.huimingpay.transaction.api;

/**
 * ClassName:PayChannelService
 * Package:com.huimingpay.transaction.api
 * Time: 2024/7/23
 */

import com.huimingpay.common.domain.BusinessException;
import com.huimingpay.transaction.dto.PayChannelDTO;
import com.huimingpay.transaction.dto.PayChannelParamDTO;
import com.huimingpay.transaction.dto.PlatformChannelDTO;

import java.util.List;

/**
 * 支付渠道服务 管理平台支付渠道，原始支付渠道，以及相关配置
 */
public interface PayChannelService {

    /**
     * 获取平台服务类型
     * @return
     * @throws BusinessException
     */
    List<PlatformChannelDTO> queryPlatformChannel() throws BusinessException;

    /**
     * 为app绑定指定的服务类型
     * @param appId 应用id
     * @param platformChannelCodes 平台服务类型列表
     * @throws BusinessException
     */
    void bindPlatformChannelForApp(String appId,String platformChannelCodes) throws BusinessException;

    /**
     * 应用是否已经绑定了某个服务类型
     * @param appId 应用id
     * @param platformChannel 平台服务类型
     * @return 已绑定返回1，否则 返回0
     */
    int queryAppBindPlatformChannel(String appId,String platformChannel) throws BusinessException;

    /**
     * 根据服务类型的code获取对应的支付渠道
     * @param platformChannelCode 平台服务类型code
     * @return 支付渠道列表
     * @throws BusinessException
     */
    List<PayChannelDTO> queryPayChannelByPlatformChannel(String platformChannelCode) throws BusinessException;

    /**
     * 保存支付渠道参数
     * @param payChannelParam 支付渠道参数
     * @throws BusinessException
     */
    void savePayChannelParam(PayChannelParamDTO payChannelParam) throws BusinessException;


    /**
     * 根据应用和服务类型查询支付渠道参数列表 结果可能是多个(支付宝渠道参数 微信渠道参数)
     * @param appId 平台应用id
     * @param platformChannelCode 平台服务类型编码code
     * @return 支付渠道参数列表
     * @throws BusinessException
     */
    List<PayChannelParamDTO> queryPayChannelParamsByAppAndPlatformChannel(String appId, String platformChannelCode) throws BusinessException;


    /**
     * 根据应用、服务类型及支付渠道获取原始支付参数param，结果只能是一个
     * @param appId 平台应用id
     * @param platformChannelCode 平台服务类型编码code
     * @param payChannel 原始支付渠道编码code
     * @return 支付渠道参数
     * @throws BusinessException
     */
    PayChannelParamDTO queryPayChannelParamByAppAndPlatformAndPayChannel(String appId, String platformChannelCode, String payChannel) throws BusinessException;
}
